/**
 * @author xuzj create 2008-06-20
 * @text 角色管理,角色权限关系管理
 */
var roleMan = {
    init: function(){
        // 定义DWR
        var dwr = {
            getTismRole: roleDwr.getTismRole,
            createRole: roleDwr.createRole,
            updateRole: roleDwr.updateRole,
            pageRole: roleDwr.pageRole,
            realFunctions: roleDwr.updateRoleAndExt,
//            getCompanies: regionDwr.getCompanies,
            getRealFunctions: roleDwr.getTismRoleAndExt,
            findFunctions: functionDwr.findTismFunctions
        };
        
//        // 定义分公司下拉列表
//        var companySelect = new CQCIS.form.DWRComboBox({
//            ds: {
//                call: dwr.getCompanies
//            },
//            emptyText: '请选择区域',
//            resizable: true,
//            listeners: {
//                'select': function(o){
//                    roleGrid.filter.companyId = o.getValue();
//                    roleGrid.reload();
//                }
//            }
//        });
        
        // 定义增加按钮
        var addBtn = new CQCIS.Button({
            text: '增加角色 (<u>A</u>)',
            iconCls: 'btn_insert',
            handler: function(){
//                if (companySelect.getValue()) {
                    roleWin.load();
//                    roleWin.form.findField('companyId').setValue(companySelect.getValue());
//                } else {
//                    CQCIS.msg('请先选择区域！');
//                }
            }
        });
        
        // 定义修改按钮
        var editBtn = new CQCIS.Button({
            text: '修改角色 (<u>E</u>)',
            iconCls: 'btn_modify',
            handler: function(){
                if (roleGrid.getSelectedRow()) {
                    roleWin.load(roleGrid.getSelectedRow().roleId);
                } else {
                    CQCIS.msg('请选择要修改的角色！');
                }
            }
        });
        
        // 定义关联权限按钮
        var realBtn = new CQCIS.Button({
            text: '关联权限 (<u>M</u>)',
            iconCls: 'btn_config',
            handler: function(){
                //functionGrid.filter = {};
                functionWin.show();
            }
        });
        
        var loginLevelMetas = {
            	'0': [[0, 'ADMIN账户'], [1, '系统管理员'], [2, '超级用户'], [3, '普通用户']],
                '1': [[1, '系统管理员'], [2, '超级用户'], [3, '普通用户']],
                '2': [[2, '超级用户'], [3, '普通用户']],
                '3': [[3, '普通用户']]
        };
        
        // 定义角色字段
        var roleMeta = [{
            id: 'roleId',
            field: 'roleId',
            desc: '角色ID',
            type: 'int',
            xtype: 'hidden'
        }, {
            field: 'roleName',
            desc: '角色名称'
        }, {
            field: 'isShare',
            desc: '是否公用角色',
            type: 'int',
            xtype: 'acombo',
            obj: {
                ds: {
                    data: [[0, '否'], [1, '是']],
                    fields: ['key', 'label']
                },
                value: 1
            }
        }, {
            field: 'companyId',
            desc: '公司ID',
            type: 'int',
            xtype: 'hidden'
        }, {
            field: 'roleDesc',
            desc: '角色说明',
            xtype: 'area'
        }, {
            field: 'roleType',
            desc: '角色类型',
            type: 'int',
            xtype: 'acombo',
            obj: {
                ds: {
                    data: loginLevelMetas[top.CURRENTUSER.loginlevel]
                },
                value: 3
            }
        }, {
            field: 'state',
            desc: '角色状态',
            type: 'int',
            xtype: 'acombo',
            obj: {
                ds: {
                    data: [[0, '无效'], [1, '有效']],
                    fields: ['key', 'label']
                },
                value: 1
            }
        }];
        
        // 角色列表字段
        var roleListMeta = [{
            id: 'roleId',
            field: 'roleId',
            desc: '角色ID',
            type: 'int',
            hidden: 1
        }, {
            field: 'roleName',
            desc: '角色名称',
            width: 100
        }, {
            field: 'roleDesc',
            desc: '角色说明',
            width: 200
        }, {
            field: 'roleType',
            desc: '角色类型',
            type: 'int',
            width: 60,
            renderer: function(val){
	        	if (val == '0') {
	                return 'ADMIN账户';
	            }
	            if (val == '1') {
	                return '系统管理员';
	            } 
	            if (val == '2') {
	                return '超级用户';
	            }
	            if (val == '3') {
	                return '普通用户';
	            }
	        }
        }, {
            field: 'state',
            desc: '角色状态',
            type: 'int',
            width: 60,
            renderer: function(val){
                return val == 1 ? '有效' : '无效';
            }
        }];
        
        // 菜单权限列表字段对象
        var functionListMeta = [{
            id: 'funcId',
            field: 'funcId',
            desc: '菜单权限ID',
            type: 'int',
            hidden: 1
        }, {
            field: 'funcName',
            desc: '菜单权限名称',
            width: 280
        }, {
            field: 'funcDesc',
            desc: '菜单权限说明',
            width: 280
        }];
        
        // 定义角色表单
        var roleForm = new CQCIS.form.DWRForm({
            dwr: {
                load: dwr.getTismRole,
                save: dwr.createRole,
                update: dwr.updateRole
            },
            metas: roleMeta,
            listeners: {
                'saveafter': function(){
                    CQCIS.msg('角色保存成功！');
                    roleGrid.reload();
                }
            }
        });
        
        // 定义角色窗口
        var roleWin = new CQCIS.form.WinForm({
            title: '角色信息',
            width: 420,
            height: 250,
            items: roleForm
        });
        
        // 增加角色右键菜单项
        var addMenu = new Ext.menu.Item({
            iconCls: 'menu_insert',
            id: 'addMenu',
            text: '增加角色',
            handler: addBtn.handler
        });
        
        // 修改角色右键菜单项
        var editMenu = new Ext.menu.Item({
            iconCls: 'menu_modify',
            id: 'editMenu',
            text: '修改角色',
            handler: editBtn.handler
        });
        
        // 关联权限右键菜单项
        var realMenu = new Ext.menu.Item({
            iconCls: 'menu_config',
            id: 'realMenu',
            text: '增加角色',
            handler: realBtn.handler
        });
        
        // 角色列表右键菜单
        var gridMenu = new Ext.menu.Menu({
            id: 'gridMenu',
            items: [addMenu, editMenu, realMenu]
        });
        
        // 定义角色列表
        var roleGrid = new CQCIS.grid.PageGrid({
            firstColumn: 'radio',
            dwr: {
                call: dwr.pageRole
            },
            metas: roleListMeta,
            tbar: ['-', addBtn, '-', editBtn, '-', realBtn],
            bbar: true,
            initload: true,
            listeners: {
                'rowdblclick': editBtn.handler,
                'rowcontextmenu': function(o, rowIndex, e){
                    e.stopEvent();
                    gridMenu.showAt(e.getXY());
                }
            }
        });
        
        roleGrid.render();
        
        // 定义权限列表
        var functionGrid = new CQCIS.grid.ListGrid({
            firstColumn: 'checkbox',
            filter: {
				state: 1
			},
            viewConfig: {
                autoFill: false
            },
            dwr: {
                call: dwr.findFunctions
            },
            metas: functionListMeta,
            listeners: {
                'render': function(o){
                    o.getStore().on('load', function(ds, datas){
                        var roleId = roleGrid.getSelectedRow().roleId;
                        dwr.getRealFunctions(roleId, function(role){
                            if (role && role.functions.length > 0) {
                                var rows = [];
                                for (var i = 0; i < role.functions.length; i++) {
                                    rows.push(ds.indexOf(ds.query('funcId', role.functions[i].funcId).get(0)));
                                }
                                functionGrid.getSelectionModel().selectRows(rows);
                            }
                        });
                    });
                }
            }
        });
        
        // 定义权限窗口
        var functionWin = new CQCIS.form.WinForm({
            title: '权限信息',
            width: 610,
            height: 320,
            items: functionGrid,
            listeners: {
                'show': function(){
                    functionGrid.reload();
                },
                'submit': function(){
                    var roleId = roleGrid.getSelectedRow().roleId;
                    var functions = functionGrid.getSelections();
                    for (var i = 0; i < functions.length; i++) {
                        functions[i] = functions[i].data;
                    }
                    dwr.realFunctions(roleId, functions, function(){
                        CQCIS.msg("角色关联权限成功！");
                        functionWin.hide();
                    });
                }
            }
        });
    }
};

Ext.onReady(roleMan.init, roleMan);
